// 导入当前目录下所有以index.js结尾的文件，true表示是否遍历子目录
const ModulesFiles = require.context("./", true, /index.js$/);

const Modules = {};

ModulesFiles.keys().forEach((key) => {
  if (key === "./index.js") return;

  // 获取出子目录的js文件
  const item = ModulesFiles(key).default;
  let mod = {};
  // 获取文件夹名称
  //   $1 表示匹配到的第一个分组（即文件名）。
  let name = key.replace(/\.\/(.*)\/index.js/, "$1");

  mod[name] = item;

  /* 
        mod {
            admin：{
                wxLogin,
                profile
            }
        }
    */

  Object.assign(Modules, mod);
});

const install = (Vue, vm) => {
  // 加载模块
  Modules;

  // api总集合
  let ApiList = {};

  // 拿到所有子目录的js文件遍历
  for (let ModulesName in Modules) {
    if (JSON.stringify(Modules[ModulesName]) === "{}") {
      continue;
    }


    // 获取js文件中的方法
    for (let ApiName in Modules[ModulesName]) {
      let config = Modules[ModulesName][ApiName];

      // 获取方法名
      config.name = ApiName;
      // console.log(config);

      // 方法名  和方法地址
      if (!config.name || !config.url) {
        continue;
      }
      // console.log(config.name, config.url); //wxlogin   admin/wxlogin 

      // console.log(config.url); //wxlogin

      if (!ApiList[ModulesName]) {
        // 创建对象
        ApiList[ModulesName] = {};
      }
      
      switch (config.method.toUpperCase()) {
        case "GET":
          ApiList[ModulesName][config.name] = (data = {}) => {
            return uni.$u.http.get(config.url, { params: data });
          };

        case "POST":
          ApiList[ModulesName][config.name] = (data = {}) => {
            return uni.$u.http.post(config.url, data);
          };

        case "UPLOAD":
          ApiList[ModulesName][config.name] = (data = {}) => {
            if (data.filePath) {
              return uni.$u.http.upload(config.url, data);
            } else {
              return uni.$u.http.post(config.url, data);
            }
          };
      }

      // console.log(config);
    }
  }

  vm.$u.api = ApiList;
}
// console.log(Modules);
export default {
  install,
};
